<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的saas管理平台
// +----------------------------------------------------------------------
// | 官方网址：https://www.niucloud-admin.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------

namespace app\api\middleware;



use app\api\service\login\AuthService;
use app\api\service\login\LoginService;
use app\core\exception\AuthException;
use app\dict\sys\AppTypeDict;
use app\Request;
use Closure;
use Exception;
use think\facade\Cache;


/**
 * 请求过于频繁验证
 * Class ApiCheckFrequency
 * @package app\api\middleware
 */
class ApiCheckFrequency
{
    /**
     * @param Request $request
     * @param Closure $next
     * @return mixed
     * @throws Exception
     */
    public function handle(Request $request, Closure $next)
    {
        // 获取请求的方法（GET、POST 等）
        $method = $request->method();
        $token = $request->apiToken();
        // 定义缓存键名，包括请求方法
        $cacheKey = 'last_request_time:' . $token . ':' . $method;

        // 获取上次请求时间
        $lastRequestTime = Cache::get($cacheKey, 0);

        // 获取当前时间
        $currentTime = time();

        // 如果上次请求时间距离当前时间不足1秒，表示请求过于频繁
        if ($currentTime - $lastRequestTime < 1) {
            // 返回请求频繁的错误信息
            return fail('请求过于频繁，请稍后再试。', [], 429);
        }

        // 更新上次请求时间
        Cache::set($cacheKey, $currentTime, 1); // 缓存1秒钟，你也可以根据需要调整时间
        return $next($request);
    }
}
